package trabalhotec.gui;

import java.awt.event.*;
import java.beans.PropertyVetoException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.event.*;

public class Aplicacao extends JFrame {
    JMenuItem efetuarlogoff;
    JMenuItem sair;
    JMenuItem cadaero;
    JMenuItem cadvoo;
    JMenuItem cadpromo;
    JMenuItem cadcli;
    JMenuItem visdetvoo;
    JMenuItem viscli;
    JMenuItem busctrecho;
    JMenuItem Visualizarvoos;
    JMenu arquivo;
    JMenu cadastro;
    JMenu procura;
    JMenuBar menuBar;
    JInternalFrame telaLogin;
    JDesktopPane desktop;
    static int aut;

    public void DesabilitarMenu() {
        arquivo.setEnabled(false);
        cadastro.setEnabled(false);
        procura.setEnabled(false);
    }
    public void HabilitarGerente() {
        arquivo.setEnabled(true);
        cadastro.setEnabled(true);
        procura.setEnabled(true);
        cadcli.setEnabled(false);
        viscli.setEnabled(false);
        busctrecho.setEnabled(false);
        cadaero.setEnabled(true);
        cadvoo.setEnabled(true);
        cadpromo.setEnabled(true);
        Visualizarvoos.setEnabled(true);
        visdetvoo.setEnabled(true);
    }
    public void HabilitarFuncionario() {
        arquivo.setEnabled(true);
        cadastro.setEnabled(true);
        procura.setEnabled(true);
        cadcli.setEnabled(true);
        viscli.setEnabled(true);
        busctrecho.setEnabled(true);
        cadaero.setEnabled(false);
        cadvoo.setEnabled(false);
        cadpromo.setEnabled(false);
        Visualizarvoos.setEnabled(false);
        visdetvoo.setEnabled(false);
    }

    Aplicacao() {
        this.setTitle("Trabalho de Tecnicas");

        desktop = new JDesktopPane();
        desktop.setName("desktopPane");

        criarMenu();
        DesabilitarMenu();
        this.setJMenuBar(menuBar);
        this.setContentPane(desktop);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setBounds(60, 10, 1200, 700);

        telaLogin = new LoginTela();
        desktop.add(telaLogin);

        telaLogin.setVisible(true);
        telaLogin.setBounds(100, 100, 250, 130);
        telaLogin.addInternalFrameListener(new InternalFrameListener() {

            public void internalFrameClosed(InternalFrameEvent e) {
                if (aut ==1) HabilitarFuncionario();
                else HabilitarGerente();
                JOptionPane.showMessageDialog(null, "Logado");

            }

            public void internalFrameOpened(InternalFrameEvent e) {
            }

            public void internalFrameClosing(InternalFrameEvent e) {

            }

            public void internalFrameIconified(InternalFrameEvent e) {
            }

            public void internalFrameDeiconified(InternalFrameEvent e) {
            }

            public void internalFrameActivated(InternalFrameEvent e) {
            }

            public void internalFrameDeactivated(InternalFrameEvent e) {
            }
        });
    }

    private void abrirAeroporto() {
        Aeroporto a = new Aeroporto();
        a = (Aeroporto)abrirIF(a);
    }
    private void abrirClientes(){
        Clientes c = new Clientes();
        c = (Clientes)abrirIF(c);
    }
    private void abrirPromocoes(){
        Promocao p = new Promocao();
        p = (Promocao)abrirIF(p);
        
    }
    private void abrirDetalhes(){
        Pesquisa p = new Pesquisa();
        p.pesqvoos();
        p = (Pesquisa)abrirIF(p);
    }

    private void abrirVoos() {
        Voos v = new Voos();
        v = (Voos)abrirIF(v);
    }

    private void abrirBusca() {
        Pesquisa p = new Pesquisa();
        p.BuscarTrecho();
        p = (Pesquisa)abrirIF(p);
        p.setBounds(30,30,600,300);
    }
    private void abrirVisu(){
        Pesquisa p = new Pesquisa();
        p.visualizarvoos();
        p = (Pesquisa)abrirIF(p);
        p.setBounds(30,30,600,300);
    }
    private void buscaCliente(){
        Clientes c = new Clientes();
        c.buscarCliente();
        c = (Clientes)abrirIF(c);
    }

    private void criarMenu() {
        menuBar = new JMenuBar();

        arquivo = new JMenu("Arquivo");
        cadastro = new JMenu("Cadastro");
        procura = new JMenu("Procurar");
        efetuarlogoff = new JMenuItem("Efetuar Logoff");
        sair = new JMenuItem("sair");
        cadaero = new JMenuItem("Cadastrar aeroportos");
        cadvoo = new JMenuItem("Cadastrar Voos");
        cadpromo = new JMenuItem("Cadastrar Promocoes");
        cadcli = new JMenuItem("Cadastrar Clientes");
        visdetvoo = new JMenuItem("Visualizar Detalhes de voo");
        viscli = new JMenuItem("Visualizar voos de cliente");
        busctrecho = new JMenuItem("Buscar trecho/Comprar passagem");
        Visualizarvoos = new JMenuItem("Visualizar voos");

        arquivo.setMnemonic(KeyEvent.VK_A);
        cadastro.setMnemonic(KeyEvent.VK_C);
        procura.setMnemonic(KeyEvent.VK_P);

        menuBar.add(arquivo);
        menuBar.add(cadastro);
        menuBar.add(procura);

        arquivo.add(efetuarlogoff);
        arquivo.add(sair);

        cadastro.add(cadaero);
        cadastro.add(cadvoo);
        cadastro.add(cadpromo);
        cadastro.addSeparator();
        cadastro.add(cadcli);

        procura.add(visdetvoo);
        procura.add(viscli);
        procura.add(Visualizarvoos);
        procura.addSeparator();
        procura.add(busctrecho);
        viscli.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e) {
                buscaCliente();
            }
            
        });
        Visualizarvoos.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e) {
               abrirVisu();
            }
            
        });
        efetuarlogoff.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e) {
                try {
                    fecharIF();
                    telaLogin.setVisible(true);
                } catch (PropertyVetoException ex) {
                    Logger.getLogger(Aplicacao.class.getName()).log(Level.SEVERE, null, ex);
                }

            }
            
        });
        sair.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
            
        });
        cadcli.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e) {
                abrirClientes();
            }
            
        });
        visdetvoo.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e) {
                abrirDetalhes();
            }
            
        });
        cadpromo.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e) {
                abrirPromocoes();
            }
            
        });
        busctrecho.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                abrirBusca();
            }
        });
        cadvoo.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                abrirVoos();
            }
        });
        cadaero.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                abrirAeroporto();
            }
        });
    }
    
    private void fecharIF() throws PropertyVetoException{
        for(JInternalFrame fr : desktop.getAllFrames()){
            if (fr.getTitle().equals("Tela Login"));
            else fr.setClosed(true);
        }DesabilitarMenu();
    }
    private JInternalFrame abrirIF(JInternalFrame frame) {
        boolean exists = false;
        for (JInternalFrame fr : desktop.getAllFrames()) {
            if (fr.getTitle().equals(frame.getTitle())) {
                exists = true;
                frame = fr;
                break;
            }
        }
        if (!exists) {
            desktop.add(frame);
            frame.setBounds(50, 50, 550, 300);
        }
        frame.setVisible(true);
        return frame;
    }
    public static void main(String[] args) {
        new Aplicacao().setVisible(true);
    }
}
